テクニカル Q&A

QD60 - ネイティブ QuickDraw ハードウェアアクセラレータの notSrcCopy 動作 (1999 年 6 月 28 日)


Q: ネイティブ QuickDraw (NQD) ハードウェアアクセラレータ (HWA) の notSrcCopy ビット転送演算 (blit) の処理方法を教えてください。

A: NQD HWA ハンドラは、すべての notSrcCopy 演算を、以下で説明するように、ハードウェアアクセラレータの適切なビット転送機能に送出します。

notSrcCopy 動作を理解する鍵は、QuickDraw が色深度とカラーテーブルのマッチング結果に応じて、次の 3 つの処理のうちの 1 つを行うということです。

  • 色深度 (8 ビット/ピクセルの場合はカラーテーブルも) が等しい場合は、直接ビット転送機能に送られて、ビット演算が行われます。
  • 色深度 (またはカラーテーブル) が異なり、コピー元が 16 ビット/ピクセル以上だと、ビット転送演算は、notSrcCopy モード指定でスケールビット転送機能へ送られます。このとき、bMustScale が 0 に設定され、scaleTable は無効 (NULL とは限らない) です。アクセラレータのデベロッパは、Color QuickDraw の標準規則にしたがって、コピー元に notSrcCopy 演算を施し、コピー先に正しい色を生成しなければなりません (コピー先が 8 ビット/ピクセルの場合は反転カラーテーブルを用いること)。
  • 色深度 (またはカラーテーブル) が異なり、コピー元が 8 ビット/ピクセル以下だと、ビット転送演算は、srcCopy モード指定でスケールビット転送機能へ送られます。このとき、bMustScale が 1 に設定され、scaleTable は有効です。スケールテーブルには、コピー元が 1 ビットの場合は 2 つの要素が、8 ビット/ピクセルの場合は 256 個の要素が含まれます。各要素は、コピー元の各インデックスに対応する (コピー先のビット深度を持つ) カラー値またはインデックス値です。コピー先が 16 ビット/ピクセルまたは 32 ビット/ピクセルの場合、アルファビットはゼロになります (つまり、白はそれぞれ、16 ビット/ピクセルの場合は 0x7FF、32 ビット/ピクセルの場合は 0x00FFFFFF)。この場合、ビット転送機能はこのテーブルを使って直接コピー元のピクセルをコピー先のピクセルにマッピングできます。

注意 : どのモードでも scaleTableIsRGBTable フィールドは常に 0 です。scaleTable ポインタを使用すべきかどうかは bMustScale を参照して判断してください。スケールテーブルの各エントリには、コピー先のビット深度に応じた RGB カラーまたはカラーインデックスが格納されていると仮定してください。


-- Geoff Stahl
Worldwide Developer Technical Support

テクニカル Q&A | 目次

To contact us, please use the Contact Us page.